package cn.exrick.manager.service;

import cn.exrick.common.pojo.DataTablesResult;
import cn.exrick.manager.dto.OrderChartData;
import cn.exrick.manager.dto.OrderDetail;
import cn.exrick.manager.dto.OrderRanking;
import cn.exrick.manager.pojo.TbOrder;

import java.util.List;


/**
 * 订单管理
 */
public interface OrderService {

    /**
     * 获得订单列表
     * @param draw
     * @param start
     * @param length
     * @param tbOrder
     * @param orderCol
     * @param orderDir
     * @return
     */
    DataTablesResult getOrderList(int draw, int start, int length, TbOrder tbOrder, String orderCol, String orderDir);

    /**
     * 统计订单数
     * @return
     */
    Long countOrder(TbOrder tbOrder);

    /**
     * 获取订单详情
     * @param orderId
     * @return
     */
    OrderDetail getOrderDetail(String orderId);

    /**
     * 发货
     * @param orderId
     * @return
     */
    int deliver(String orderId,String status);

    /**
     * 备注
     * @param orderId
     * @param message
     * @return
     */
    int remark(String orderId, String message);

    /**
     * 取消订单
     * @param orderId
     * @return
     */
    int cancelOrderByAdmin(String orderId);

    /**
     * 删除订单
     * @param id
     * @return
     */
    int deleteOrder(String id);

    int invalidOrder(String id);

    /**
     * 定时取消订单
     */
    int cancelOrder();


    /**
     * 审核订单
     * @param orderId
     * @param flag  0拒绝 1通过
     * @param roleId 角色id
     */
    void approvalOrder(String orderId, int roleId,int flag);

    TbOrder getTbOrderById(String orderId);

    /**
     * 订单状态统计
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderChartData> statisticOrderStatus(String startTime, String endTime);

    /**
     * 支付方式统计
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderChartData> statisticOrderPayType(String startTime, String endTime);

    /**
     * 商品销售排行
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderRanking> salesRanking(String startTime,String endTime);


    /**
     * 部门申领金额排行
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderRanking> orgApplyRanking(String startTime,String endTime);



    /**
     * 商品销量统计
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderRanking> salesStatistic(String startTime,String endTime);

    /**
     * 部门申领统计
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderRanking> orgApplyStatistic(String startTime,String endTime);

    /**
     * 用户申领统计
     * @param startTime
     * @param endTime
     * @return
     */
    List<OrderRanking> userApplyStatistic(String startTime,String endTime);

    /**
     * 超时未取件订单自动完成
     */
    void finishOrder();

    /**
     * 设置配货时间
     * @param orderId
     * @param pickingDays
     */
    void updatePickingDays(String orderId,Integer pickingDays);
}
